package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2021-10-30 10:33
 * @description: Functions of this class is
 **/
public class 只出现了一次的数字III {
    public static void main(String args[]){
        System.out.println(4&1);
    }
    class Solution {
        public int[] singleNumber(int[] nums) {
            int x=0;
            for(int num:nums){//先将那两个只出现了一次的数字相^的结果求出来，因为其他出现了两次的都能消掉
                x^=num;
            }
            //然后找到这两个数字相异或结果不同的第一位
            int a=x;
            int index=0;
            while(a!=0){
                if((a&1)==1){
                    break;
                }
                index++;
                a>>=1;
            }
            //然后通过这一位来进行分辨这两位数字
            int ans=0;
            for(int num:nums){
                if((num>>index&1)==1){
                    ans^=num;
                }
            }
            return new int[]{ans,x^ans};
        }
    }
}